Ext.onReady(function() {
	Ext.lib.Ajax.defaultPostHeader += '; charset=utf-8';//处理ie提交中文乱码问题
	Ext.BLANK_IMAGE_URL = 'ext/resources/images/default/s.gif';

	//树形的右键菜单

	var treeRightMenu = new Ext.menu.Menu({
		id : 'theContextMenu',
		items : [{
			id : 'addNode',
			text : '添加',
			menu : [{
				id : 'insertNode',
				text : '添加兄弟节点',
				handler : function() {
					insertNodeAction();
				}
			}, {
				id : 'appendNode',
				text : '添加孩子节点',
				handler : function() {
					appendNodeAction();
				}
			}]
		}, '-', {
			id : 'delNode',
			text : '删除',
			handler : function() {
				delNodeAction();
			}
		}, {
			id : 'modifNode',
			text : '修改',
			handler : function() {
				modifNodeAction();
			}
		}]
	});

	var p = new Ext.Panel({
		title : '可编辑的动态树',
		collapsible : false,
		renderTo : 'container',
		height : '446',
		width : '800',
		tbar : [{
			text : '添加兄弟节点',
			iconCls : 'save',
			handler :function(){				
					insertNodeAction();				
			}
		}, '-', {
			text : '添加孩子节点',
			iconCls : 'save',
			handler :function(){				
					appendNodeAction();				
			}
		
		},'-',{
			text : '修改节点',
			iconCls : 'save',
			handler :function(){				
					modifNodeAction();				
			}		
		},'-',{
			text : '删除节点',
			iconCls : 'save',
			handler :function(){	
				var selectedNode = treepanel.getSelectionModel().getSelectedNode();
				if (selectedNode != null) {
					delNodeAction();		
				}else{
					Ext.Msg.alert("警告", "请先选择一个节点！");
				}
			}
		
		},'-',{
			text : '全部展开',
			iconCls :'save',
			handler :function(){				
					treepanel.expandAll();	
			}
		},'-',{
			text : '全部收缩',
			iconCls :'save',
			handler :function(){				
					treepanel.collapseAll();
			}
		}],
		html : '<div id="tree-div" style="height:100%;width:50%"></div> '
	});
	var Tree = Ext.tree;
	//定义根节点的Loader
	var treeloader = new Tree.TreeLoader({
		dataUrl : WebServiceUrl + '?trancode=Node'
	});
	//异步加载根节点
	var rootnode = new Tree.AsyncTreeNode({
		id : '0',
		allowDrag : false,
		text : '树形结构'
	});
	var treepanel = new Tree.TreePanel({
		el : 'tree-div', //填充区域
		border : false, //边框
		animate : true, //动画效果
		autoScroll : true, //自动滚动
		enableDD : true, //拖拽节点              
		containerScroll : true,
		height : '426',
		width : '790',
		title : '功能菜单树',
		tools :[{
			id:'refresh',
			handler:function(){
				refreshTree();
			}
		}],
		loader : treeloader
	});

	//右键弹出菜单事件
	var treeRightKeyAction = function(node, e) {
		e.preventDefault();
		node.select();
		treeRightMenu.showAt(e.getXY());
	};
	//添加兄弟节点事件实现
	var insertNodeAction = function() {
		var selectedNode = treepanel.getSelectionModel().getSelectedNode();
		if (selectedNode != null) {
			if (selectedNode != treepanel.getRootNode()) {
				var selectedParentNode = selectedNode.parentNode;
				App.AddTree(selectedParentNode,rootnode);
			}else{
				Ext.Msg.alert("警告", "不能添加根节点的兄弟节点！");
			}
		}else{
			Ext.Msg.alert("警告", "请先选择一个节点！");
		}
	};
	//添加孩子节点事件实现
	var appendNodeAction = function() {
		var selectedNode = treepanel.getSelectionModel().getSelectedNode();
		if (selectedNode != null) {
			App.AddTree(selectedNode, rootnode);
		}else{
			Ext.Msg.alert("警告", "请先选择一个节点！");
		}
	};
	//删除节点事件实现
	var delNodeAction = function() {
		
		Ext.Msg.confirm("确认删除", "确定要删除所选节点吗？", function(btn) {
			if (btn == "yes") {
				delTree();
			}
		});
	}
	//删除操作
	var delTree = function() {
		var selectedNode = treepanel.getSelectionModel().getSelectedNode();// 得到选中的节点
		
		if (selectedNode != treepanel.getRootNode()) {
			// 删除
			Ext.Ajax.request({
				url : WebServiceUrl,
				params : {
					trancode : 'Node4',
					id : selectedNode.id
				},
				success : function(result) {
					json = Ext.util.JSON.decode(result.responseText);
					if (json.success) {
						Ext.MessageBox.alert('操作成功', json.message);
					} else {
						Ext.MessageBox.alert('操作失败', json.message);
					}
				}
			});
			selectedNode.remove();
		} else {
			Ext.Msg.alert("警告", "不能删除树的根节点！");
		}
	}
	// 修改节点事件实现
	var modifNodeAction = function() {
		var selectedNode = treepanel.getSelectionModel().getSelectedNode();// 得到选中的节点
		if (selectedNode != null) {
			if (selectedNode != treepanel.getRootNode()) {
				App.EditMenu(selectedNode,  rootnode);
			}else{
				Ext.Msg.alert("警告", "不能修改树的根节点！");
			}
		}else{
			Ext.Msg.alert("警告", "请先选择一个节点！");
		}
	}

	//刷新操作
	var refreshTree = function() {
		rootnode.loaded = false;
		rootnode.expand();
	}
	
	var treeNodedragover = function(e){
		var n = e.target;
		var type = e.point;
		if(type=='append'){
			return true;
		}
		if (n.leaf) {
			n.leaf = false;
		}
		
		return false;
		
	}
	

	//设置根节点
	treepanel.setRootNode(rootnode);

	//响应事件，传递node参数
	treepanel.on('beforeload', function(node) {
		treepanel.loader.dataUrl = WebServiceUrl + '?trancode=Node'
	});

	//给tree添加右键事件
	treepanel.on('contextmenu', treeRightKeyAction, this);
	
	/**
	 * 为树2添加了nodedragover事件。
	 * 目的在于能是树2的叶子节点能实现添加功能，
	 * 原因是ext定义的过程中，tree的叶子节点在拖拽的过程中不允许添加其他节点。
	 */
	treepanel.on("nodedragover", treeNodedragover,this);

	//给tree添加拖到事件
	treepanel.on('nodedrop', function(e) {
		if (e.point == 'append') {
			// 拖动操作
			Ext.Ajax.request({
				url : WebServiceUrl,
				params : {
					trancode : 'Node5',
					pid : e.target.id,
					id : e.dropNode.id
				},
				success : function(result) {
					json = Ext.util.JSON.decode(result.responseText);
					if (json.success) {
						Ext.MessageBox.alert('操作成功', json.message);
					} else {
						Ext.MessageBox.alert('操作失败', json.message);
					}
				}
			});
		}
	});

	//渲染呈现
	treepanel.render();

	rootnode.expand(false, false);

});
